メイン コーダーズルーム【スクリプト系】
最適化 for文で沢山の処理をさせるよりfor文の処理を分割した方が早い訳 | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| yosh-tosh | Åê¹ÆNo.41557 投稿日時: 2009-2-24 17:09 |
新米 ![]() ![]() 居住地: 投稿: 13
使用環境:
MacOSX Flash CS3 AS3.0 |
最適化 for文で沢山の処理をさせるよりfor文の処理を分割した方が早い訳 こんにちわyosh-toshです。
もしかしたら、ご存知かもしれませんが。。。 スクリプトの最適化を行なっていて、不思議な事が起こりました。 表題の通り処理速度についてです。以下にスクリプトをあげます。 ※トレース結果は10回検証した結果の平均です。 ※検証するときはmcというクラス名でリンケージしてください。 パターン1 (1万回ループ 1回) トレース結果:8662ms パターン2 (1万回ループ 2回) トレース結果:7575ms パターン3 (1万回ループ 3回) トレース結果:7542ms 1万回ループを一回しかしていないパターン1が一番早いと思いきや 1秒以上も遅いです。 何故でしょう???? これは3Dなど沢山の演算を行なう上でスゴく重要なんじゃないかとおもうんですが。。。 分かる方がいたら教えて下さい。 |
| 961832p | Åê¹ÆNo.41568 投稿日時: 2009-2-25 19:07 |
常連 ![]() ![]() 居住地: あきる野 投稿: 98
使用環境:
Pro- Firefox, Chromium(Iron), IE :AS3: - Adobe Flex SDK, Eclipse, AIR GEAR - LB.Log AS3, Alcon2 :AS2: - AMES (ASDT, MTASC, Eclipse, swfmill) - The Natural Entry Point Method - LB.Log, Zeroi Pro, ![]() |
Re: 最適化 for文で沢山の処理をさせるよりfor文の処理を分割した方が早い訳 自分も気になったので、投稿されましたソースコードの「new mc();」を「new Sprite();」に置き換えてFlexで試してみました。 FlexSDKのバージョンは 3.2.0.3958、FlashPlayerは 9.0.124.0、ブラウザは IE です。 確かに同じような傾向になることを確認しました。 これは思いつきの意見なので、まったく参考にならないのですが(汗) 人によるソースコードの最適化もそうですが、コンパイラでもバイトコードを最適化しているかもしれません。 また、仮想マシンではCPU固有の命令やマルチコア等でも、それらを判別することでマシンコードが変わってくるかもしれません。 上手くいえないのですが、そのCPUにとって処理しやすい処理の流れの場合に速度が稼げるというか…。 自分も深層を知りたいです。
|
| yosh-tosh | Åê¹ÆNo.41578 投稿日時: 2009-2-26 22:02 |
新米 ![]() ![]() 居住地: 投稿: 13
使用環境:
MacOSX Flash CS3 AS3.0 |
Re: 最適化 for文で沢山の処理をさせるよりfor文の処理を分割した方が早い訳 961832pさん
ありがとうございます。 なるほど、人の最適化はCPUにとって逆効果になるかも知れない。。。 なんとも怖い話しです。 逆にCPUの得意不得意が分かれば効果的な最適化が行なえるという事ですね。 そんなの勉強してる時間は出来ないですけど。。。 早く人の手で最適化など行なわなくてもイイ時代になればいいですね。 ウチのPCが古いだけか。。。 ちなみに環境は Mac OSX 10.4 flash CS3 flashplayer 9.0.45 firefox 3.0 でした |
| 961832p | Åê¹ÆNo.41581 投稿日時: 2009-2-27 5:33 |
常連 ![]() ![]() 居住地: あきる野 投稿: 98
使用環境:
Pro- Firefox, Chromium(Iron), IE :AS3: - Adobe Flex SDK, Eclipse, AIR GEAR - LB.Log AS3, Alcon2 :AS2: - AMES (ASDT, MTASC, Eclipse, swfmill) - The Natural Entry Point Method - LB.Log, Zeroi Pro, ![]() |
Re: 最適化 for文で沢山の処理をさせるよりfor文の処理を分割した方が早い訳 yosh-tosh さん、応答ありがとうございます。 引用: なるほど、人の最適化はCPUにとって逆効果になるかも知れない。。。 あわわ…あくまで推測なので、あまり影響を受けないでくださいね(汗笑)。 その後、「new mc();」を「createEmptyMovieClip("mc"+i, depth+i);」に置き換え、AS2のコンパイラであるMTASCで試してみました。 計測してみると、パート1・2とも14500ms前後で速度に差がなかったので、もしかしたらソースコードへ施した最適化が無意味になるなんてこともあるかもしれないと感じました。 とはいえAS3ではビット演算による高速化など、伝統的な手法が有効らしいので色々試してみるのも楽しいかもしれません。 その際は実際に計測してみることが大切だと思います。 ・ActionScript3 最適化・高速化Tips 簡易まとめ - ConquestArrow.addEventListener(); - actionscriptグループ 引用: 早く人の手で最適化など行なわなくてもイイ時代になればいいですね。 FlashやJavaなどの仮想マシンを介するタイプは、CPUなどのハードウェアを極力意識しない、誰もが簡単に高品質なものを…といった方向性だと思うので、そのうちそういう時代になるんでしょうね…少し寂しい気もしますが(苦笑)。 でも、なかにはバイトコードを直接(?)書く人もおられるようで面白いです。 引用: ウチのPCが古いだけか。。。 先の計測では、CPUがPentium4 2.4GHz(1コア)、メモリがDDRのPCで試したのですが、CPUをCore2Quad 2.83GHz(4コア)、メモリがDDR3のPCで同じように計測してみると、パート1が約340ms、パート2と3は約330msにまで速度が変化しました。 なので、PCの性能を上げるのが一番手っ取り早いのかもしれませんが、制限がある中で生まれる「何とか○○できないかな」とプログラムを工夫しようとする精神は、とてもエキサイティングで、最適化に限らずとても大切だと自分は思います。 でも、苦しみも同じように生まれるので最終的には変わらないのかもしれませんが(苦笑)。
|
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン




Pro
Pro, 

